package com.shrcl.engineerprocess.domain;

import com.shrcl.engineerprocess.domain.Certification;
import com.shrcl.engineerprocess.domain.Engineer;
import com.shrcl.engineerprocess.domain.EngineerCertificationDocument;
import com.shrcl.engineerprocess.domain.EngineerCertificationStatus;
import com.shrcl.engineerprocess.domain.impl.EngineerCertificationImpl;
import com.shrcl.engineerprocess.domain.proxy.EngineerCertificationProxy;
import edu.fudan.langlab.domain.document.IDocument;
import edu.fudan.langlab.domain.document.IDocumentContainer;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = EngineerCertificationImpl.class)
public interface EngineerCertification extends IModelObject, IDocumentContainer {
  public abstract Engineer getEngineer();
  
  public abstract EngineerCertification setEngineer(final Engineer engineer);
  
  public abstract Certification getCertification();
  
  public abstract EngineerCertification setCertification(final Certification certification);
  
  public abstract Date getIssueDate();
  
  public abstract EngineerCertification setIssueDate(final Date issueDate);
  
  public abstract EngineerCertification getDerivedCerf();
  
  public abstract EngineerCertification setDerivedCerf(final EngineerCertification derivedCerf);
  
  public abstract String getComments();
  
  public abstract EngineerCertification setComments(final String comments);
  
  public abstract Collection<EngineerCertificationDocument> getDocuments();
  
  public abstract EngineerCertificationDocument createAndAddtoDocuments();
  
  public abstract EngineerCertificationDocument createAndAddtoDocuments(final Procedure1<EngineerCertificationDocument> updater);
  
  public abstract EngineerCertification removeFromDocuments(final EngineerCertificationDocument engineerCertificationDocument);
  
  public abstract EngineerCertification removeAllDocuments();
  
  public abstract IDocument createDocument(final Procedure1<? super IDocument> init);
  
  public abstract void removeDocument(final IDocument document);
  
  public abstract Date getExpiredDate();
  
  public abstract void checkValid();
  
  public abstract EngineerCertificationStatus getStatus();
  
  public abstract void start();
  
  public abstract void update(final Procedure1<? super EngineerCertification> updater);
  
  public abstract void commit();
  
  public abstract void checkTimer();
  
  public abstract void checkExpiredTimer();
  
  public abstract void renew();
  
  public abstract void forceClosed();
  
  public abstract Boolean isCreated();
  
  public abstract Boolean isEffective();
  
  public abstract Boolean isAbouttoexpired();
  
  public abstract Boolean isExpired();
  
  public abstract Boolean isClosed();
  
  public abstract EngineerCertificationProxy toProxy();
}
